#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
struct Node{
    int opt;
    vector<int>In;
    vector<int>Out;
}Dev[505];
int Input[N][505],Ind[505],ans[505];
vector<int>e[505];
int getNum(int pos,char *str){
    int num=0;
    int len=strlen(str);
    while(pos<len){
        num=num*10+str[pos]-'0';
        ++pos;
    }
    return num;
}
int Operation(vector<int>q,int opt){
    if(opt==0) return !q[0];
    else{
        int cnt=q.size();
        int r=q[0];
        if(opt==1){
            for(int i=1;i<cnt;++i) r&=q[i];
            return r;
        }
        else if(opt==2){
            for(int i=1;i<cnt;++i) r|=q[i];
            return r;
        }
        else if(opt==3){
            for(int i=1;i<cnt;++i) r^=q[i];
            return r;
        }
        else if(opt==4){
            for(int i=1;i<cnt;++i) r&=q[i];
            return !r;
        }
        for(int i=1;i<cnt;++i) r|=q[i];
        return !r;
    }
}
int dfs(int s,int u){
	if(ans[u]!=-1) return ans[u];
    int cnt=Dev[u].In.size();
    vector<int>t;
    for(int i=0;i<cnt;++i){
        t.push_back(Input[s][Dev[u].In[i]]);
    }
    cnt=Dev[u].Out.size();
    for(int i=0;i<cnt;++i){
        t.push_back(dfs(s,Dev[u].Out[i]));
    }
    return ans[u]=Operation(t,Dev[u].opt);
}
bool topolog(int n){
    queue<int>Q;
    for(int i=1;i<=n;++i){
        if(!Ind[i]) Q.push(i);
    }
    int cnt=0;
    while(!Q.empty()){
        int u=Q.front();
        Q.pop();
        ++cnt;
        int cnt=e[u].size();
        for(int i=0;i<cnt;++i){
            int v=e[u][i];
            if(!(--Ind[v])) Q.push(v);
        }
    }
    return cnt==n;
}
int main(){
    map<string,int>Mp;
    Mp["NOT"]=0;Mp["AND"]=1;Mp["OR"]=2;Mp["XOR"]=3;Mp["NAND"]=4;Mp["NOR"]=5;
    char str[10];
    int Q;scanf("%d",&Q);
    while(Q--){
        int m,n;scanf("%d%d",&m,&n);    //电路和器件数量
        for(int i=1;i<=n;++i){
            e[i].clear();
            Ind[i]=0;
            Dev[i].In.clear();
            Dev[i].Out.clear();
        }
        for(int i=1;i<=n;++i){   //每个器件
            scanf("%s",str);
            Dev[i].opt=Mp[str];
            int k;scanf("%d",&k);
            for(int j=0;j<k;++j){
                scanf("%s",str);
                int num=getNum(1,str);
                if(str[0]=='I') Dev[i].In.push_back(num);
                else{
                    e[num].push_back(i);
                    Ind[i]++;
                    Dev[i].Out.push_back(num);
                }
            }
        }
        int S;scanf("%d",&S);
        for(int i=0;i<S;++i){
            for(int j=1;j<=m;++j) scanf("%d",&Input[i][j]);
        }
        bool fg=topolog(n);
        if(!fg) puts("LOOP");
        for(int i=0;i<S;++i){
            int s,num;scanf("%d",&s);
            memset(ans,-1,sizeof(ans));
            for(int j=0;j<s;++j){
                scanf("%d",&num);
                if(fg) printf("%d%c",dfs(i,num),j==s-1?'\n':' ');
            }
        }
    }
    return 0;
}
